package vista;

import java.util.Iterator;

import javax.swing.Icon;
import javax.swing.ImageIcon;

import modelo.Casillero;
import modelo.ModeloJuego;
import modelo.ModeloJuego.PosicionableTipo;
import modelo.Posicionable;
import modelo.Tablero;
import modelo.Nave;

public class ManejadorDeIconos {
	
	public static Icon ponerIcono(int i, int j) {
		ImageIcon icono=null;
		
		Iterator<Posicionable> iterador = Tablero.getInstancia().getCasillero(i, j).iteradorDeContenido();
    	int contadorNaves = 0;
    	while (iterador.hasNext()) {
    		contadorNaves++;
    		icono = ManejadorDeIconos.devolverIcono(iterador.next(), Tablero.getInstancia().getCasillero(i,j));
    	}
    	if (contadorNaves > 1) 
    		icono = new ImageIcon("iconos/navsup.png");
    	
		return icono;
	}
	
	

	private static ImageIcon devolverIcono(Posicionable objeto,
			Casillero casillero) {		
		ModeloJuego.PosicionableTipo tipoObjeto = objeto.devolverTipo();
		
		if (objeto.esNave()) {
			int parteDeLaNave = ((Nave) objeto).getCasilleroInicial().distancia(casillero);
			
			if (((Nave) objeto).getEstado(parteDeLaNave) == Nave.DANIADA)
				return devolverIconoDaniada(tipoObjeto);
			
			if (((Nave) objeto).getEstado(parteDeLaNave) == Nave.DESTRUIDA)
				return devolverIconoDestruida(tipoObjeto);
			
			return devolverIconoSana(tipoObjeto);
		}
		
		return devolverIconoMina(tipoObjeto);		
	}


	private static ImageIcon devolverIconoMina(PosicionableTipo tipoObjeto) {
		
		switch (tipoObjeto) {
			case MINA_CONTACTO:
				return new ImageIcon("iconos/minacont.png");
			
			case MINA_PUNTUAL:
				return new ImageIcon("iconos/minapun.png");
				
			case MINA_DOBLE:
				return new ImageIcon("iconos/minadob.png");
				
			case MINA_TRIPLE:
				return new ImageIcon("iconos/minatri.png");
				
			default:
				return null;			
		}
		
	}

	private static ImageIcon devolverIconoSana(PosicionableTipo tipoObjeto) {
		switch (tipoObjeto) {
			case BUQUE:
				return new ImageIcon("iconos/buque.png");
			
			case DESTRUCTOR:
				return new ImageIcon("iconos/destructor.png");
			
			case LANCHA:
				return new ImageIcon("iconos/lancha.png");
			
			case PORTAAVIONES:
				return new ImageIcon("iconos/portaaviones.png");
			
			case ROMPEHIELOS:
				return new ImageIcon("iconos/rompehielos.png");			
		
			default:
				return null;			
		}
	}

	private static ImageIcon devolverIconoDestruida(PosicionableTipo tipoObjeto) {
		switch (tipoObjeto) {			
		
			case DESTRUCTOR:
				return new ImageIcon("iconos/destructorDestruido.png");
		
			case LANCHA:
				return new ImageIcon("iconos/lanchaDestruida.png");
		
			case PORTAAVIONES:
				return new ImageIcon("iconos/portaavionesDestruido.png");
		
			case ROMPEHIELOS:
				return new ImageIcon("iconos/rompehielosDestruido.png");			
	
			default:
				return null;			
		}
	}

	private static ImageIcon devolverIconoDaniada(PosicionableTipo tipoObjeto) {
		switch (tipoObjeto) {	
		
			case ROMPEHIELOS:
				return new ImageIcon("iconos/rompehielosDaniado.png");			

			default:
				return null;			
		}
	}	

}
